import { Point,Node,Direction  } from '@topology/core'

export function simpleClass(ctx, node) {
  // const wr = node.rect.width * node.borderRadius
  // const hr = node.rect.height * node.borderRadius
  // let r = wr < hr ? wr : hr
  // if (node.rect.width < 2 * r) {
  //   r = node.rect.width / 2
  // }
  // if (node.rect.height < 2 * r) {
  //   r = node.rect.height / 2
  // }
  // ctx.beginPath()
  // ctx.moveTo(node.rect.x +r, node.rect.y)
  // // ctx.lineTo(node.rect.x, node.rect.y)
  // ctx.arcTo(
  //   node.rect.x + node.rect.width,
  //   node.rect.y,
  //   node.rect.x + node.rect.width,
  //   node.rect.y + node.rect.height,
  //
  // r
  // )
  // ctx.arcTo(
  //   node.rect.x + node.rect.width,
  //   node.rect.y + node.rect.height,
  //   node.rect.x,
  //   node.rect.y + node.rect.height,
  //   r
  // )
  // ctx.arcTo(
  //   node.rect.x,
  //   node.rect.y + node.rect.height,
  //   node.rect.x,
  //   node.rect.y,
  //   r
  // )
  // ctx.arcTo(
  //   node.rect.x,
  //   node.rect.y,
  //   node.rect.x + node.rect.width,
  //   node.rect.y,
  //   r
  // )
  // ctx.closePath()
  //
  // ctx.moveTo(node.rect.x, node.rect.y + 40)
  // ctx.lineTo(node.rect.ex, node.rect.y + 40)
  node.fillStyle && ctx.fill()
  ctx.stroke()
}

export function myclass(ctx, node) {
  var wr = node.rect.width * node.borderRadius;
  var hr = node.rect.height * node.borderRadius;
  var r = wr < hr ? wr : hr;
  if (node.rect.width < 2 * r) {
    r = node.rect.width / 2;
  }
  if (node.rect.height < 2 * r) {
    r = node.rect.height / 2;
  }
  ctx.beginPath();
  // ctx.moveTo(node.rect.x + r, node.rect.y);
  // ctx.arcTo(node.rect.x + node.rect.width, node.rect.y, node.rect.x + node.rect.width, node.rect.y + node.rect.height, r);
  // ctx.arcTo(node.rect.x + node.rect.width, node.rect.y + node.rect.height, node.rect.x, node.rect.y + node.rect.height, r);
  // ctx.arcTo(node.rect.x, node.rect.y + node.rect.height, node.rect.x, node.rect.y, r);
  // ctx.arcTo(node.rect.x, node.rect.y, node.rect.x + node.rect.width, node.rect.y, r);
  ctx.closePath();
  node.fillStyle && ctx.fill();
  ctx.stroke();
}

export function interfaceClass(ctx, node) {
  const wr = node.rect.width * node.borderRadius
  const hr = node.rect.height * node.borderRadius
  let r = wr < hr ? wr : hr
  if (node.rect.width < 2 * r) {
    r = node.rect.width / 2
  }
  if (node.rect.height < 2 * r) {
    r = node.rect.height / 2
  }
  ctx.beginPath()
  ctx.moveTo(node.rect.x + r, node.rect.y)
  ctx.arcTo(
    node.rect.x + node.rect.width,
    node.rect.y,
    node.rect.x + node.rect.width,
    node.rect.y + node.rect.height,
    r
  )
  ctx.arcTo(
    node.rect.x + node.rect.width,
    node.rect.y + node.rect.height,
    node.rect.x,
    node.rect.y + node.rect.height,
    r
  )
  ctx.arcTo(
    node.rect.x,
    node.rect.y + node.rect.height,
    node.rect.x,
    node.rect.y,
    r
  )
  ctx.arcTo(
    node.rect.x,
    node.rect.y,
    node.rect.x + node.rect.width,
    node.rect.y,
    r
  )
  ctx.closePath()

  ctx.moveTo(node.rect.x, node.rect.y + 40)
  ctx.lineTo(node.rect.ex, node.rect.y + 40)

  const height = node.rect.y + 20 + node.rect.height / 2
  ctx.moveTo(node.rect.x, height)
  ctx.lineTo(node.rect.ex, height)

  node.fillStyle && ctx.fill()
  ctx.stroke()
}

export function myAnchors(node) {
  node.anchors.push(new Point(node.rect.x, node.rect.y + node.rect.height / 2, Direction.Left));
  node.anchors.push(new Point(node.rect.x + node.rect.width / 2, node.rect.y, Direction.Up));
  node.anchors.push(new Point(node.rect.x + node.rect.width, node.rect.y + node.rect.height / 2, Direction.Right));
  node.anchors.push(new Point(node.rect.x + node.rect.width / 2, node.rect.y + node.rect.height, Direction.Bottom));

  // demo，其他自定义锚点。这里只是示例。
  for (let i = 10; i < 360; i += 10) {
    if (i % 90 === 0) {
      continue;
    }

    const direction = Math.floor(i / 90);
    const pt = new Point(
      node.rect.center.x + (Math.sin((i / 180) * Math.PI) * node.rect.width) / 2,
      node.rect.center.y + (Math.cos((i / 180) * Math.PI) * node.rect.height) / 2,
      direction
    );
    pt.hidden = true;
    node.anchors.push(pt);
  }
}
